#ifndef CHECKINGACCOUNT_HH
#define CHECKINGACCOUNT_HH
#include "IAccount.hh"
#include "Transaction.hh"
#include <string>
#include <vector>
//Implements checking account logic, supports full transactions. 
namespace Bank {
    class CheckingAccount : public IAccount {
    private:
        std::string accountId;
        std::string ownerName;
        double balance;

    public:
        CheckingAccount(const std::string& id, const std::string& owner, double initialBalance = 0.0);

        std::string getAccountId() const override;
        std::string getOwnerName() const override;
        std::string getFormattedBalance() const override;
        std::string getAccountType() const override;
        double getBalance() const override;
        bool transferTo(IAccount* toAccount, double amount, const std::string& note = "") override;
        void displayInfo() const override;
        void deposit(double amount) override;
        bool withdraw(double amount) override;
        void receiveTransfer(double amount) override;
        // Provides the account interface for the customer to interact with their account
        void accessAccountInterface(const std::string& customerName, const std::vector<Transaction>& allTransactions) override;
    };
}
#endif

